1. 逻辑架构
2. 逻辑架构说明
连接器(Connectors)
也就是mysql的 连接驱动
系统管理和控制工具(Management Serveices & Utilities)
连接池(Connection Pool)
SQL Layer MySQL业务层
SQL接口(SQL Interface)
接收SQL DML DDL
解析器(Parser)
select * from t1
词法分析 分词: 形成成语法树
语法分析 分析 : 符合SQL的语法 SQL的语法 : SQL 92 limit MYSQL自己的语法elect * from t1 语法错误 sytnx error ..
形成正确语法树
查询优化器(Optimizer**)
mysql 觉得你写的SQL 不是完美的优化什么呢?
- 索引优化
索引 只使用一个 使用最优
多表关联优化
应该是小表关联大表,类似两层for循环一样
where 优化
从左到右 MySQL 找过滤力度最大的 先执行
where id=1 and sex=’男’ where sex=’男’ and id=1 explain
从右到左 Oracle
查询缓存(Cache和Buffer)
把查询结果存起来
SQL — > hash后的值 唯一 则 表示
注意:SQL hash值是优化后的sql进行hash
存储引擎(Pluggable Storage Engines)
以表为单位,创建表时,指定存储引擎
creat table xxx() engine=InnoDB/Memory/MyISAM
MySQL的存储引擎是针对表进行指定的。(engine=InnoDB\myisam)
3. 存储引擎说明
存储引擎 | 说明 |
---|---|
MyISAM | 高速引擎,拥有较高的插入,查询速度,但不支持事务、不支持行**锁**、支持3种不同的存储格式。包括静态型、动态型和压缩型。 |
InnoDB | 5.5版本后MySQL的默认数据库,支持事务和行级锁定,事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全,比MyISAM处理速度稍慢、支持外键(FOREIGN KEY) |
ISAM | MyISAM的前身,MySQL5.0以后不再默认安装 |
MRG_MyISAM(MERGE) | 将多个表联合成一个表使用,在超大规模数据存储时很有用 |
Memory | 内存存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。只在内存上保存数据,意味着数据可能会丢失,比如临时表,就是放在内存中的 |
Falcon | 一种新的存储引擎,支持事物处理,传言可能是InnoDB的替代者 |
Archive | 将数据压缩后进行存储,非常适合存储大量的独立的,作为历史记录的数据,但是只能进行插入和查询操作 |
CSV | CSV 存储引擎是基于 CSV 格式文件存储数据(应用于跨平台的数据交换) |
4. InnoDB和MyISAM存储引擎区别
Innodb | Myisam | |
---|---|---|
存储文件 | .frm 表定义文件 .ibd 数据文件和索引文件 |
.frm 表定义文件 .myd 数据文件 .myi 索引文件 |
锁 | 表锁、行锁 | 表锁 |
事务 | 支持 | 不支持 |
CRDU | 读、写 | 读多 |
count | 扫表(count(1)) | 专门存储的地方 (加where也扫表) |
索引结构 | B+ Tree | B+ Tree |
外键 | 支持 | 不支持 |
注意:从上表中可以看出,InnoDB存储引擎,数据文件和索引文件在一个文件中;而MyIsam存储的索引文件和数据文件是分开的。
5. 存储引擎的选型:
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比 较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。
MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度, 对数据的安全性要求较低,不需要持久保存,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。(比的应用如临时表)
注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎
6. 如何查看数据库默认的存储引擎
查看当前数据库支持的存储引擎,使用如下命令:
1 | show engines; |
查看数据库默认使用的存储引擎: InnoDB
1 | show variables like '%storage_engine%'; |